In a wireless communication system, a transmitter transmits a set of one or more transport blocks (TBs) within each of multiple so-called transmission time intervals (TTIs). A TTI is thereby the inter-arrival time of transport block sets, e.g., at the physical layer as received from the media access control (MAC) layer. A receiver correspondingly receives a set of one or more transport blocks within each TTI. That said, noisy or otherwise unreliable radio channels threaten to produce decoding errors at the receiver. The transmitter aims to enable the receiver to detect those decoding errors by inserting a decoding check within a transport block. The transmitter may, for example, implement a decoding check by generating a hash (e.g., a cyclic redundancy check, CRC) over the transport block's data and appending that hash onto the transport block. The receiver may then independently generate the hash over the transport block's data and detect decoding errors based on whether the independently generated hash matches the received hash.
After inserting a decoding check within a transport block, the transmitter may then channel encode that transport block. The transmitter may for example apply turbo coding or some other forward error correction (FEC) coding to the transport block. This way, the receiver can first attempt to correct decoding errors in the received transport block, and then use the decoding check to detect whether any decoding errors remain.
The transmitter may however segment a transport block into smaller so-called code blocks before channel encoding, e.g., if the transport block is larger than the block size supported by the channel encoder. This segmentation may reduce memory requirements of the channel encoder, without compromising coding gain. Regardless, with a transport block segmented into multiple code blocks, the transmitter generates a decoding check for each individual code block and appends the decoding checks onto the ends of the respective code blocks. The transmitter then channel encodes each individual code block. In this way, segmentation effectively provides multiple decoding checks within a transport block.
Known approaches statically define the number and size of code blocks into which a transport block is segmented, based solely on the size of that transport block. These approaches do so in a way such that a transport block is always segmented into the smallest number of equally sized code blocks possible. This keeps the code blocks as large as possible with the aim of achieving maximum decoding performance. Segmenting a transport block in this way, however, effectively means that decoding checks are statically confined to predefined positions within a transport block of a specific size.